/*
* String.h
* iphone-gl-app
*
* Created by John Ryland on 15/06/09.
* Copyright 2009 InvertedLogic. All rights reserved.
*
*/
#ifndef STRING_H
#define STRING_H
#include "Iterators.h"
class String : public List<char>
{
public:
String() : List<char>()
{
}
String(const String &cpy)
{
items = 0;
cnt = 0;
if ( &cpy != this )
copy(cpy.items);
}
String(const char *cpy)
{
items = 0;
copy(cpy);
}
const String& operator=(const String& cpy)
{
if ( &cpy != this )
copy(cpy.items);
return *this;
}
const String &operator=(const char *cpy)
{
copy(cpy);
return *this;
}
void copy(const char *str)
{
free(items);
items = 0;
cnt = 0;
if ( str ) {
items = strdup(str);
cnt = strlen(str);
}
}
const String &operator+=(const char *str)
{
if ( str ) {
int oldCnt = cnt;
int addCnt = strlen(str);
cnt += addCnt;
items = (char *)realloc(items, sizeof(char) * (cnt + 1));
memcpy(items + oldCnt, str, addCnt + 1);
}
return *this;
}
const String &operator+=(const String &str)
{
if ( str.items ) {
int oldCnt = cnt;
cnt += str.cnt;
items = (char *)realloc(items, sizeof(char) * (cnt + 1));
memcpy(items + oldCnt, str.items, str.cnt + 1);
}
return *this;
}
inline operator const char *() const
{
return items;
}
};
inline const String &operator+(const String &stra, const String &strb)
{
static String ret;
ret = stra;
ret += strb;
return ret;
}
inline const String &operator+(const String &stra, const char *strb)
{
static String ret;
ret = stra;
ret += strb;
return ret;
}
#endif // STRING_H